package view;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Pattern;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

import metier.ChargerCorpus;
import metier.ChargerFichier;
import metier.ConfigFiltre;
import metier.EcrireFichier;
import metier.Filtre;
import metier.FiltreMetier;
import metier.GestionFichier;

public class JImporterAdjectifs extends JFrame {

	ConfigFiltre config;
	JTable tabFrequent;
	DefaultTableModel model ;
	Object[][] datas;
	JLabel path;
	JButton parcourir, ajouter,supprimer;
	String pathCorpus, nomCorpus;
	List<String> liste = new ArrayList<>();
	List<String> contenu = new ArrayList<>();
	List<String> pathAbsolute = new ArrayList<String>();
	int index = 0;
	
	public JImporterAdjectifs() {
		super();
		init();
		setLayout(new BorderLayout());
		add(topPanel(), BorderLayout.NORTH);
				
		tabFrequent = new JTable();
		model = (DefaultTableModel) tabFrequent.getModel();
		JScrollPane pane = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		pane.setViewportView(tabFrequent);
		tabFrequent.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
		
		for (int i = model.getRowCount()-1; i >= 0; i--) {
			model.removeRow(i);
		}
		
		liste = new ArrayList<>();
		liste = ChargerCorpus.lireDossier("filtres/adjectifsPossessifs/"); 
		
		Object[] data = new Object[1];
		data[0] = "Nom filtre";
		model.setColumnIdentifiers(data);
		datas = new Object[liste.size()][1];
		
		for (String filtre : liste) {
			pathAbsolute.add("filtres/adjectifsPossessifs/"+liste.get(index));
			datas[index][0] = liste.get(index);
			
			model.addRow(datas[index]);
			++index;
		}
		
		add(pane, BorderLayout.CENTER);
		
		setVisible(true);
	}
	
	public void init() {
		setTitle("Fouille De Texte - 2015");
		setSize(new Dimension(470, 400));
		setLocationRelativeTo(null);
		
		config = new ConfigFiltre();
	}
	
	public JPanel topPanel() {
		// Partie parcourir
		JPanel res = new JPanel();
		res.setLayout(new GridLayout(1, 4));
		path = new JLabel("/path");
		res.add(path);
		parcourir = new JButton("parcourir");
		res.add(parcourir);
		parcourir.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				JFileChooser openFile = new JFileChooser();
				openFile.setAcceptAllFileFilterUsed(false);
				openFile.showOpenDialog(null);
				
				try {
					// Open an input stream
					Scanner reader = new Scanner(openFile.getSelectedFile());
					if(reader != null) {
						String separatorPath = File.separator;
						String[] tab = openFile.getSelectedFile().toString().split(Pattern.quote(separatorPath));
						path.setText(tab[tab.length-1]);
						pathCorpus = openFile.getSelectedFile().toString();
						
						System.out.println(pathCorpus);
					}
				} catch (Exception e2) {
					// TODO: handle exception
					System.out.println(e2);
				}
			}
		});
		
		ajouter = new JButton("Ajouter");
		res.add(ajouter);
		ajouter.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				nomCorpus = path.getText();
				
				FiltreMetier filtre = new FiltreMetier();
				contenu = filtre.transformationEnList(ChargerFichier.lireFichier(pathCorpus));
				System.out.println(contenu);
				pathAbsolute = new ArrayList<String>();
				EcrireFichier.ecrireFichier("filtres/adjectifsPossessifs/"+nomCorpus, contenu);
				
				for (int i = model.getRowCount()-1; i >= 0; i--) {
					model.removeRow(i);
				}
				
				liste = ChargerCorpus.lireDossier("filtres/adjectifsPossessifs/");
				
				index = 0;
				datas = new Object[liste.size()][1];
				
				for (String f : liste) {
					pathAbsolute.add("filtres/adjectifsPossessifs/"+liste.get(index));
					datas[index][0] = liste.get(index);
					
					model.addRow(datas[index]);
					++index;
				}
				
			}
		});
		
		supprimer = new JButton("Supprimer");
		supprimer.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				if (tabFrequent.getSelectedRow() != -1) {
					int choice = tabFrequent.getSelectedRow();
					GestionFichier.supprimerFichier(pathAbsolute.get(choice));
					model.removeRow(choice);
					pathAbsolute.remove(choice);
					
		        }
				
			}
		});
		res.add(supprimer);
		
		return res;
	}
	
}
